package com.ocr.baidu;

import com.baidu.aip.ocr.AipOcr;
import com.framework.config.OcrConfig;
import com.utils.Base64Util;
import com.utils.FileUtil;
import com.utils.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONObject;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;

/**
 * 文件名称： com.example.filecopy.OCRUtils.java</br>
 * 初始作者： AirOrangeWorkSpace</br>
 * 创建日期： 2020/12/21 8:11</br>
 * 功能说明： 百度识别文字 <br/>
 * =================================================<br/>
 * 修改记录：<br/>
 * 修改作者        日期       修改内容<br/>
 * ================================================<br/>
 * Copyright (c) 2020-2021 .All rights reserved.<br/>
 */
@Slf4j
public class BaiduOCRUtils {
    /**
     * 卡证识别
     */
    public static String idCardByToken(OcrConfig.BaiduOcr baiduOcr,String filePath) {
        String idCardPrefix = baiduOcr.getIdCardPrefix();
        String idCardUrl = baiduOcr.getIdCardUrl();
        String token = baiduOcr.getToken();
        // 请求url
        try {
            // 本地文件路径

            byte[] imgData = FileUtil.readFileByBytes(filePath);
            String imgStr = Base64Util.encode(imgData);
            String imgParam = URLEncoder.encode(imgStr, StandardCharsets.UTF_8.name());

            String param = idCardPrefix + imgParam;
            // 注意这里仅为了简化编码每一次请求都去获取access_token，线上环境access_token有过期时间， 客户端可自行缓存，过期后重新获取。
            return  HttpUtil.post(idCardUrl, token, param);
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 通用文字识别
     */
    public static String generalBasicByToken(OcrConfig.BaiduOcr baiduOcr,String filePath) {
        String generalBasicPrefix = baiduOcr.getGeneralBasicPrefix();
        String generalBasicUrl = baiduOcr.getGeneralBasicUrl();
        String token = baiduOcr.getToken();
        // 请求url
        try {
            // 本地文件路径
            byte[] imgData = FileUtil.readFileByBytes(filePath);
            String imgStr = Base64Util.encode(imgData);
            String imgParam = URLEncoder.encode(imgStr, StandardCharsets.UTF_8.name());

            String param = generalBasicPrefix + imgParam;
            // 注意这里仅为了简化编码每一次请求都去获取access_token，线上环境access_token有过期时间， 客户端可自行缓存，过期后重新获取。
            return HttpUtil.post(generalBasicUrl, token, param);
        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 通用文字识别 sdk
     */
    public static JSONObject generalBasicBySdk(OcrConfig.BaiduOcr baiduOcr,String filePath) {
        String appId = baiduOcr.getAppId();
        String apiKey = baiduOcr.getApiKey();
        String secredKey = baiduOcr.getSecretKey();
        AipOcr client = new AipOcr(appId, apiKey, secredKey);
        // 可选：设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);
        return client.basicGeneral(filePath, new HashMap<>());
    }
    /**
     * 身份证文字识别 sdk
     */
    public static JSONObject idCardBySdk(OcrConfig.BaiduOcr baiduOcr,String filePath) {
        String appId = baiduOcr.getAppId();
        String apiKey = baiduOcr.getApiKey();
        String secredKey = baiduOcr.getSecretKey();
        AipOcr client = new AipOcr(appId, apiKey, secredKey);
        // 可选：设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);
        return client.idcard(filePath,"front", new HashMap<>());
    }
}
